//
//  Jikken.m
//  MarketDataAnalyzer
//
//  Created by jiro on 10/09/25.
//  Copyright 2010 jiro music. All rights reserved.
//

#import "Jikken.h"
#import "vector"

struct BasicStatics {
	int			priceClass;
	NSString*	code;
	NSString*	startDate;
	NSString*	endDate;
	double		average;
	double		stddev;
};

@implementation Jikken

- (void) jikkenGo
{
	double ranges[ countOfPriceClass ][ 2 ] = { { 0, 1000 }, { 1000, 10000 }, { 10000, 100000 }, { 100000, 1000000 } };
	for ( int i = 0; i < countOfPriceClass; i++ ) {
		for ( int j = 0; j < 2; j++ ) {
			priceRanges[ i ][ j ] = ranges[ i ][ j ];
		}
	}
	
	NSLog( @"分析開始" );

	//	変数定義
	analyzer = [ DataAnalyzer alloc ];
	[ analyzer initWithConnectionToDb: @"MarketDatabase" ofHost: @"localhost" asUser: @"jiro" andDbInfo: nil ];
	dbOperator = [ analyzer dbOperator ];

	NSMutableArray* startDates = [ NSMutableArray array ];
	NSMutableArray* endDates = [ NSMutableArray array ];
	for ( int i = 0; i < 10; i++ ) {
		NSString* startDate = [ NSString stringWithFormat: @"%d-01-01", 2000 + i ]; 
		NSString* endDate = [ NSString stringWithFormat: @"%d-01-01", 2001 + i ]; 
		[ startDates addObject: startDate ];
		[ endDates addObject: endDate ];
	}

	for ( int i = 0; i < [ startDates count ] - 1; i ++ ) {
		NSString* startDate0 = [ startDates objectAtIndex: i ];
		NSString* endDate0 = [ endDates objectAtIndex: i ];
		NSString* startDate1 = [ startDates objectAtIndex: i + 1];
		NSString* endDate1 = [ endDates objectAtIndex: i + 1 ];
		std::vector< JikkenResult > results;
		[ self jikkenSubFromStartDate: startDate0 toEndDate: endDate0 
			andFromStartDate: startDate1 toEndDate: endDate1 intoResults: results ];

		for ( int j = 0; j < results.size(); j++ ) {
			NSString* s = [ NSString stringWithFormat: 
				@"カテゴリ %d:"
//					@"\t株価 %f ~ %f"
					@"\t平均の変化率の平均     %f"
					@"\t標準偏差の変化率の平均  %f",
				j,
//				priceRanges[ i ][ 0 ], priceRanges[ i ][ 1 ],
//				results[ j ].averageRateAverage, results[ j ].stddevRateAverage,
				results[ j ].averageRateAverage, results[ j ].stddevRateAverage ];
			NSLog( @"%@", s );
		}
	}

	[ analyzer disconnect ];
}

- (void) jikkenSubFromStartDate: (NSString*) startDate0 toEndDate: (NSString*) endDate0
	andFromStartDate: (NSString*) startDate1 toEndDate: (NSString*) endDate1
	intoResults: ( std::vector< JikkenResult >& ) results
{
	NSString* starts[ countOfPeriod ] = { startDate0, startDate1 };
	NSString* ends[ countOfPeriod ] = { endDate0, endDate1 };

	NSLog( @"銘柄コードの収集" );

	//	株価毎に銘柄を収集
	NSArray* codes1;
	NSArray* codes2;
	NSArray* codes3;
	NSArray* codes4;
	NSArray* codesLists[ countOfPriceClass ] = { codes1, codes2, codes3, codes4 };
	for ( int i = 0; i < countOfPriceClass; i++ ) {
		NSLog( @"株価 %f ~ %f の銘柄を収集", priceRanges[ i ][ 0 ], priceRanges[ i ][ 1 ] );
		codesLists[ i ] =
			[ self getBrandCodesWhereExchangeDataFrom: 
				startDate0 exchangeDateTo: endDate1
				lowerLimit: priceRanges[ i ][ 0 ] andHigherLimit: priceRanges[ i ][ 1 ] ];
	}
	
	NSLog( @"平均分散の計算開始" );

	//	各銘柄の平均, 分散を計算
	std::vector< BasicStatics > basicStatics;
	for ( int i = 0; i < countOfPriceClass; i++ ) {

		id codes = codesLists[ i ];
		for ( int k = 0; k < countOfPeriod; k++ ) {
		
			for ( int j = 0; j < [ codes count ]; j++ ) {

				id code = [ codes objectAtIndex: j ];
			
//				NSLog( @"銘柄コード %@ を処理中", code );
				NSString* query = [ NSString stringWithFormat:
					@"select avg( adjusted_end_price ), stddev( adjusted_end_price ) from stock_exchange_ja_table "
					@"where code = '%@' and '%@' <= exchange_date and exchange_date < '%@';",
					 code, starts[ k ], ends[ k ] ];
//				NSLog( @"%@", query );
				PGresult* res = nil;
				if ( DbResponse_Success == [ dbOperator executeQuery: query intoResult: & res ] ) {			
					BasicStatics statics;
					statics.code = code;
					statics.priceClass = i;
					statics.startDate = starts[ k ];
					statics.endDate = ends[ k ];
					statics.average = [ [ NSString stringWithCString: PQgetvalue( res, 0, 0 ) encoding: NSUTF8StringEncoding ] doubleValue ];
					statics.stddev = [ [ NSString stringWithCString: PQgetvalue( res, 0, 1 ) encoding: NSUTF8StringEncoding ] doubleValue ];
					basicStatics.push_back( statics );
				} else {
					NSLog( @"銘柄の平均計算に失敗 %@\n%@", [ dbOperator errorMessage ], query );
					return;
				}
			}
		}
	}

	NSLog( @"集計結果を整理中" );

	//	同一銘柄の今年と１年前のデータを比較
	int skipDataCount = 0;
	std::vector< std::vector< double > > averageChangesByPriceClass( countOfPriceClass );
	std::vector< std::vector< double > > stddevChangesByPriceClass( countOfPriceClass );
	for ( size_t i = 0; i < basicStatics.size(); i++ ) {
		const BasicStatics& statics0 = basicStatics[ i ];
		for ( size_t j = i + 1; j < basicStatics.size(); j++ ) {
			const BasicStatics& statics1 = basicStatics[ j ];
			if ( NO == [ statics0.code isEqualToString: statics1.code ] ) {
				continue;
			}
			if ( ! ( YES == [ statics0.startDate isEqualToString: starts[ 0 ] ] &&
					 YES == [ statics1.startDate isEqualToString: starts[ 1 ] ] ) ) {
				continue;
			}
			double averageRate = statics1.average / statics0.average;
			double stddevRate = statics1.stddev / statics0.stddev;
			if ( isnan( averageRate ) || isinf( averageRate ) ||
				 isnan( stddevRate ) || isinf( stddevRate ) ) {
				skipDataCount++;
				continue;
			}
			averageChangesByPriceClass[ statics0.priceClass ].push_back( fabs( averageRate ) );
			stddevChangesByPriceClass[ statics0.priceClass ].push_back( fabs( stddevRate ) );
		}
	}
	
//	NSLog( @"結果を表示" );

	//	株価のクラス毎に結果を集計
	if ( results.size()!= countOfPriceClass ) {
		results.resize( countOfPriceClass );
	}
	for ( int i = 0; i < countOfPriceClass; i++ ) {
		double average = 0.0;
		double stddev = 0.0;
		const std::vector< double >& averages = averageChangesByPriceClass[ i ];
		const std::vector< double >& stddevs = stddevChangesByPriceClass[ i ];
		const int count = averages.size(); 
		for ( int j = 0; j < count; j++ ) {
			average += averages[ j ];
			stddev += stddevs[ j ];
		}
		average /= count;
		stddev /= count;

		JikkenResult res;
		res.averageRateAverage = average;
		res.stddevRateAverage = stddev;
		results[ i ] = res;
	}
	NSLog( @"%d 件のデータをスキップ", skipDataCount );
	
	NSLog( @"分析終了" );
}

-(NSArray*) getBrandCodesWhereExchangeDataFrom:
	(NSString*) dataFrom 
	exchangeDateTo: (NSString*) dateTo 
	lowerLimit: (double) lowerLimit 
	andHigherLimit: (double) higherLimit
{
	//	変数定義
	id codes = [ NSMutableArray array ];
	NSString* query = [ NSString stringWithFormat:
		@"select distinct code from stock_exchange_ja_table group by code, exchange_date "
		@"having %f <= avg( adjusted_end_price ) and avg( adjusted_end_price ) < %f and "
		@"'%@' <= exchange_date and exchange_date <= '%@' order by code "
//		@" limit 15 "
		@";",
			lowerLimit, higherLimit, dataFrom, dateTo ];
	//	----
		
//	NSLog( @"%@", query );

	//	SQL実行
	PGresult* res = nil;
	if ( DbResponse_Success == [ dbOperator executeQuery:query intoResult: & res ] ) {
		const int row = PQntuples( res );
		const int col = PQnfields( res );
		for ( int i = 0; i < row; i++ ) { 
			for ( int j  =0; j < col; j++ ) {
				[ codes addObject: [ NSString stringWithCString: PQgetvalue( res, i, j ) encoding: NSUTF8StringEncoding ] ];
			}
		}
	} else {
		NSLog( @"プログラム終了。実行に失敗 %@", [ dbOperator errorMessage ] );
		return nil;
	}
	return codes;
}

@end

/*	実行結果

[Session started at 2010-09-25 16:02:18 +0900.]
GNU gdb 6.3.50-20050815 (Apple version gdb-1469) (Wed May  5 04:36:56 UTC 2010)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".tty /dev/ttys001
プログラムをデバッガに読み込み中...
プログラムは読み込まれました。
run
[Switching to process 16906]
実行中...
2010-09-25 16:02:19.643 MarketDataAnalyzer[16906:a0f] 分析開始
2010-09-25 16:02:19.667 MarketDataAnalyzer[16906:a0f] 銘柄コードの収集
2010-09-25 16:02:19.667 MarketDataAnalyzer[16906:a0f] 株価 0.000000 ~ 1000.000000 の銘柄を収集
2010-09-25 16:03:10.825 MarketDataAnalyzer[16906:a0f] 株価 1000.000000 ~ 10000.000000 の銘柄を収集
2010-09-25 16:04:01.620 MarketDataAnalyzer[16906:a0f] 株価 10000.000000 ~ 100000.000000 の銘柄を収集
2010-09-25 16:04:52.540 MarketDataAnalyzer[16906:a0f] 株価 100000.000000 ~ 1000000.000000 の銘柄を収集
2010-09-25 16:05:43.483 MarketDataAnalyzer[16906:a0f] 平均分散の計算開始
2010-09-25 16:06:13.912 MarketDataAnalyzer[16906:a0f] 集計結果を整理中
2010-09-25 16:06:15.067 MarketDataAnalyzer[16906:a0f] 283 件のデータをスキップ
2010-09-25 16:06:15.068 MarketDataAnalyzer[16906:a0f] 分析終了
2010-09-25 16:06:15.069 MarketDataAnalyzer[16906:a0f] カテゴリ 0:	平均の変化率の平均     0.921423	標準偏差の変化率の平均  1.279204
2010-09-25 16:06:15.069 MarketDataAnalyzer[16906:a0f] カテゴリ 1:	平均の変化率の平均     0.821704	標準偏差の変化率の平均  1.077791
2010-09-25 16:06:15.070 MarketDataAnalyzer[16906:a0f] カテゴリ 2:	平均の変化率の平均     0.621300	標準偏差の変化率の平均  0.976730
2010-09-25 16:06:15.070 MarketDataAnalyzer[16906:a0f] カテゴリ 3:	平均の変化率の平均     0.673892	標準偏差の変化率の平均  1.359233
2010-09-25 16:06:15.071 MarketDataAnalyzer[16906:a0f] 銘柄コードの収集
2010-09-25 16:06:15.072 MarketDataAnalyzer[16906:a0f] 株価 0.000000 ~ 1000.000000 の銘柄を収集
2010-09-25 16:07:09.701 MarketDataAnalyzer[16906:a0f] 株価 1000.000000 ~ 10000.000000 の銘柄を収集
2010-09-25 16:08:03.989 MarketDataAnalyzer[16906:a0f] 株価 10000.000000 ~ 100000.000000 の銘柄を収集
2010-09-25 16:08:58.701 MarketDataAnalyzer[16906:a0f] 株価 100000.000000 ~ 1000000.000000 の銘柄を収集
2010-09-25 16:09:53.204 MarketDataAnalyzer[16906:a0f] 平均分散の計算開始
2010-09-25 16:10:28.949 MarketDataAnalyzer[16906:a0f] 集計結果を整理中
2010-09-25 16:10:30.176 MarketDataAnalyzer[16906:a0f] 187 件のデータをスキップ
2010-09-25 16:10:30.177 MarketDataAnalyzer[16906:a0f] 分析終了
2010-09-25 16:10:30.177 MarketDataAnalyzer[16906:a0f] カテゴリ 0:	平均の変化率の平均     0.871207	標準偏差の変化率の平均  1.005715
2010-09-25 16:10:30.178 MarketDataAnalyzer[16906:a0f] カテゴリ 1:	平均の変化率の平均     0.862715	標準偏差の変化率の平均  0.993167
2010-09-25 16:10:30.179 MarketDataAnalyzer[16906:a0f] カテゴリ 2:	平均の変化率の平均     0.778254	標準偏差の変化率の平均  1.170623
2010-09-25 16:10:30.179 MarketDataAnalyzer[16906:a0f] カテゴリ 3:	平均の変化率の平均     0.790676	標準偏差の変化率の平均  1.247896
2010-09-25 16:10:30.180 MarketDataAnalyzer[16906:a0f] 銘柄コードの収集
2010-09-25 16:10:30.180 MarketDataAnalyzer[16906:a0f] 株価 0.000000 ~ 1000.000000 の銘柄を収集
2010-09-25 16:11:26.516 MarketDataAnalyzer[16906:a0f] 株価 1000.000000 ~ 10000.000000 の銘柄を収集
2010-09-25 16:12:22.895 MarketDataAnalyzer[16906:a0f] 株価 10000.000000 ~ 100000.000000 の銘柄を収集
2010-09-25 16:13:20.460 MarketDataAnalyzer[16906:a0f] 株価 100000.000000 ~ 1000000.000000 の銘柄を収集
2010-09-25 16:14:17.438 MarketDataAnalyzer[16906:a0f] 平均分散の計算開始
2010-09-25 16:14:58.364 MarketDataAnalyzer[16906:a0f] 集計結果を整理中
2010-09-25 16:14:59.734 MarketDataAnalyzer[16906:a0f] 191 件のデータをスキップ
2010-09-25 16:14:59.734 MarketDataAnalyzer[16906:a0f] 分析終了
2010-09-25 16:14:59.735 MarketDataAnalyzer[16906:a0f] カテゴリ 0:	平均の変化率の平均     1.101507	標準偏差の変化率の平均  1.746819
2010-09-25 16:14:59.736 MarketDataAnalyzer[16906:a0f] カテゴリ 1:	平均の変化率の平均     1.069219	標準偏差の変化率の平均  1.950927
2010-09-25 16:14:59.736 MarketDataAnalyzer[16906:a0f] カテゴリ 2:	平均の変化率の平均     1.107815	標準偏差の変化率の平均  3.326029
2010-09-25 16:14:59.737 MarketDataAnalyzer[16906:a0f] カテゴリ 3:	平均の変化率の平均     1.112313	標準偏差の変化率の平均  3.231609
2010-09-25 16:14:59.738 MarketDataAnalyzer[16906:a0f] 銘柄コードの収集
2010-09-25 16:14:59.738 MarketDataAnalyzer[16906:a0f] 株価 0.000000 ~ 1000.000000 の銘柄を収集
2010-09-25 16:16:01.408 MarketDataAnalyzer[16906:a0f] 株価 1000.000000 ~ 10000.000000 の銘柄を収集
2010-09-25 16:17:13.075 MarketDataAnalyzer[16906:a0f] 株価 10000.000000 ~ 100000.000000 の銘柄を収集
2010-09-25 16:18:13.042 MarketDataAnalyzer[16906:a0f] 株価 100000.000000 ~ 1000000.000000 の銘柄を収集
2010-09-25 16:19:13.165 MarketDataAnalyzer[16906:a0f] 平均分散の計算開始
2010-09-25 16:19:59.279 MarketDataAnalyzer[16906:a0f] 集計結果を整理中
2010-09-25 16:20:00.962 MarketDataAnalyzer[16906:a0f] 275 件のデータをスキップ
2010-09-25 16:20:00.963 MarketDataAnalyzer[16906:a0f] 分析終了
2010-09-25 16:20:00.964 MarketDataAnalyzer[16906:a0f] カテゴリ 0:	平均の変化率の平均     1.426819	標準偏差の変化率の平均  1.603093
2010-09-25 16:20:00.965 MarketDataAnalyzer[16906:a0f] カテゴリ 1:	平均の変化率の平均     1.555893	標準偏差の変化率の平均  1.776961
2010-09-25 16:20:00.966 MarketDataAnalyzer[16906:a0f] カテゴリ 2:	平均の変化率の平均     2.236115	標準偏差の変化率の平均  2.501657
2010-09-25 16:20:00.966 MarketDataAnalyzer[16906:a0f] カテゴリ 3:	平均の変化率の平均     1.974870	標準偏差の変化率の平均  2.990705
2010-09-25 16:20:00.967 MarketDataAnalyzer[16906:a0f] 銘柄コードの収集
2010-09-25 16:20:00.968 MarketDataAnalyzer[16906:a0f] 株価 0.000000 ~ 1000.000000 の銘柄を収集
2010-09-25 16:21:06.135 MarketDataAnalyzer[16906:a0f] 株価 1000.000000 ~ 10000.000000 の銘柄を収集
2010-09-25 16:22:11.902 MarketDataAnalyzer[16906:a0f] 株価 10000.000000 ~ 100000.000000 の銘柄を収集
2010-09-25 16:23:41.078 MarketDataAnalyzer[16906:a0f] 株価 100000.000000 ~ 1000000.000000 の銘柄を収集
2010-09-25 16:24:45.779 MarketDataAnalyzer[16906:a0f] 平均分散の計算開始
2010-09-25 16:25:47.295 MarketDataAnalyzer[16906:a0f] 集計結果を整理中
2010-09-25 16:25:49.284 MarketDataAnalyzer[16906:a0f] 197 件のデータをスキップ
2010-09-25 16:25:49.285 MarketDataAnalyzer[16906:a0f] 分析終了
2010-09-25 16:25:49.286 MarketDataAnalyzer[16906:a0f] カテゴリ 0:	平均の変化率の平均     1.330657	標準偏差の変化率の平均  2.282181
2010-09-25 16:25:49.287 MarketDataAnalyzer[16906:a0f] カテゴリ 1:	平均の変化率の平均     1.271937	標準偏差の変化率の平均  2.200786
2010-09-25 16:25:49.287 MarketDataAnalyzer[16906:a0f] カテゴリ 2:	平均の変化率の平均     1.490143	標準偏差の変化率の平均  2.350000
2010-09-25 16:25:49.288 MarketDataAnalyzer[16906:a0f] カテゴリ 3:	平均の変化率の平均     1.285391	標準偏差の変化率の平均  1.787679
2010-09-25 16:25:49.289 MarketDataAnalyzer[16906:a0f] 銘柄コードの収集
2010-09-25 16:25:49.289 MarketDataAnalyzer[16906:a0f] 株価 0.000000 ~ 1000.000000 の銘柄を収集
2010-09-25 16:26:58.159 MarketDataAnalyzer[16906:a0f] 株価 1000.000000 ~ 10000.000000 の銘柄を収集
2010-09-25 16:28:07.749 MarketDataAnalyzer[16906:a0f] 株価 10000.000000 ~ 100000.000000 の銘柄を収集
2010-09-25 16:29:16.705 MarketDataAnalyzer[16906:a0f] 株価 100000.000000 ~ 1000000.000000 の銘柄を収集
2010-09-25 16:30:26.261 MarketDataAnalyzer[16906:a0f] 平均分散の計算開始
2010-09-25 16:31:38.467 MarketDataAnalyzer[16906:a0f] 集計結果を整理中
2010-09-25 16:31:40.712 MarketDataAnalyzer[16906:a0f] 275 件のデータをスキップ
2010-09-25 16:31:40.713 MarketDataAnalyzer[16906:a0f] 分析終了
2010-09-25 16:31:40.714 MarketDataAnalyzer[16906:a0f] カテゴリ 0:	平均の変化率の平均     1.171160	標準偏差の変化率の平均  1.261319
2010-09-25 16:31:40.714 MarketDataAnalyzer[16906:a0f] カテゴリ 1:	平均の変化率の平均     1.213499	標準偏差の変化率の平均  1.231418
2010-09-25 16:31:40.715 MarketDataAnalyzer[16906:a0f] カテゴリ 2:	平均の変化率の平均     0.917940	標準偏差の変化率の平均  1.377705
2010-09-25 16:31:40.716 MarketDataAnalyzer[16906:a0f] カテゴリ 3:	平均の変化率の平均     0.919135	標準偏差の変化率の平均  1.359466
2010-09-25 16:31:40.717 MarketDataAnalyzer[16906:a0f] 銘柄コードの収集
2010-09-25 16:31:40.717 MarketDataAnalyzer[16906:a0f] 株価 0.000000 ~ 1000.000000 の銘柄を収集
2010-09-25 16:32:53.264 MarketDataAnalyzer[16906:a0f] 株価 1000.000000 ~ 10000.000000 の銘柄を収集
2010-09-25 16:34:09.500 MarketDataAnalyzer[16906:a0f] 株価 10000.000000 ~ 100000.000000 の銘柄を収集
2010-09-25 16:35:46.297 MarketDataAnalyzer[16906:a0f] 株価 100000.000000 ~ 1000000.000000 の銘柄を収集
2010-09-25 16:37:00.008 MarketDataAnalyzer[16906:a0f] 平均分散の計算開始
2010-09-25 16:38:56.450 MarketDataAnalyzer[16906:a0f] 集計結果を整理中
2010-09-25 16:38:59.035 MarketDataAnalyzer[16906:a0f] 205 件のデータをスキップ
2010-09-25 16:38:59.035 MarketDataAnalyzer[16906:a0f] 分析終了
2010-09-25 16:38:59.036 MarketDataAnalyzer[16906:a0f] カテゴリ 0:	平均の変化率の平均     0.868899	標準偏差の変化率の平均  1.092374
2010-09-25 16:38:59.037 MarketDataAnalyzer[16906:a0f] カテゴリ 1:	平均の変化率の平均     0.909549	標準偏差の変化率の平均  1.184843
2010-09-25 16:38:59.038 MarketDataAnalyzer[16906:a0f] カテゴリ 2:	平均の変化率の平均     0.566953	標準偏差の変化率の平均  0.780142
2010-09-25 16:38:59.039 MarketDataAnalyzer[16906:a0f] カテゴリ 3:	平均の変化率の平均     0.667930	標準偏差の変化率の平均  1.056258
2010-09-25 16:38:59.039 MarketDataAnalyzer[16906:a0f] 銘柄コードの収集
2010-09-25 16:38:59.040 MarketDataAnalyzer[16906:a0f] 株価 0.000000 ~ 1000.000000 の銘柄を収集
2010-09-25 16:40:12.740 MarketDataAnalyzer[16906:a0f] 株価 1000.000000 ~ 10000.000000 の銘柄を収集
2010-09-25 16:41:41.227 MarketDataAnalyzer[16906:a0f] 株価 10000.000000 ~ 100000.000000 の銘柄を収集
2010-09-25 16:42:54.416 MarketDataAnalyzer[16906:a0f] 株価 100000.000000 ~ 1000000.000000 の銘柄を収集
2010-09-25 16:44:06.984 MarketDataAnalyzer[16906:a0f] 平均分散の計算開始
2010-09-25 16:45:30.399 MarketDataAnalyzer[16906:a0f] 集計結果を整理中
2010-09-25 16:45:33.624 MarketDataAnalyzer[16906:a0f] 216 件のデータをスキップ
2010-09-25 16:45:33.625 MarketDataAnalyzer[16906:a0f] 分析終了
2010-09-25 16:45:33.626 MarketDataAnalyzer[16906:a0f] カテゴリ 0:	平均の変化率の平均     0.680014	標準偏差の変化率の平均  1.258858
2010-09-25 16:45:33.626 MarketDataAnalyzer[16906:a0f] カテゴリ 1:	平均の変化率の平均     0.653874	標準偏差の変化率の平均  1.247945
2010-09-25 16:45:33.627 MarketDataAnalyzer[16906:a0f] カテゴリ 2:	平均の変化率の平均     0.538918	標準偏差の変化率の平均  0.905232
2010-09-25 16:45:33.628 MarketDataAnalyzer[16906:a0f] カテゴリ 3:	平均の変化率の平均     0.562652	標準偏差の変化率の平均  0.966481
2010-09-25 16:45:33.629 MarketDataAnalyzer[16906:a0f] 銘柄コードの収集
2010-09-25 16:45:33.630 MarketDataAnalyzer[16906:a0f] 株価 0.000000 ~ 1000.000000 の銘柄を収集
2010-09-25 16:46:53.916 MarketDataAnalyzer[16906:a0f] 株価 1000.000000 ~ 10000.000000 の銘柄を収集
2010-09-25 16:48:07.777 MarketDataAnalyzer[16906:a0f] 株価 10000.000000 ~ 100000.000000 の銘柄を収集
2010-09-25 16:49:21.799 MarketDataAnalyzer[16906:a0f] 株価 100000.000000 ~ 1000000.000000 の銘柄を収集
2010-09-25 16:50:35.878 MarketDataAnalyzer[16906:a0f] 平均分散の計算開始
2010-09-25 16:51:43.215 MarketDataAnalyzer[16906:a0f] 集計結果を整理中
2010-09-25 16:51:46.090 MarketDataAnalyzer[16906:a0f] 67 件のデータをスキップ
2010-09-25 16:51:46.091 MarketDataAnalyzer[16906:a0f] 分析終了
2010-09-25 16:51:46.091 MarketDataAnalyzer[16906:a0f] カテゴリ 0:	平均の変化率の平均     0.816239	標準偏差の変化率の平均  0.736958
2010-09-25 16:51:46.092 MarketDataAnalyzer[16906:a0f] カテゴリ 1:	平均の変化率の平均     0.787715	標準偏差の変化率の平均  0.732684
2010-09-25 16:51:46.093 MarketDataAnalyzer[16906:a0f] カテゴリ 2:	平均の変化率の平均     0.773315	標準偏差の変化率の平均  0.733467
2010-09-25 16:51:46.093 MarketDataAnalyzer[16906:a0f] カテゴリ 3:	平均の変化率の平均     0.775085	標準偏差の変化率の平均  0.748565

Debugger stopped.
Program exited with status value:0.
*/